GtkStackSwitcher: Don't emit notify::visible-child when setting a stack
authorDebarshi Ray <debarshir@gnome.org>
Wed, 6 May 2015 14:53:43 +0000 (16:53 +0200)
committerDebarshi Ray <debarshir@gnome.org>
Wed, 6 May 2015 20:31:10 +0000 (22:31 +0200)
Synchronizing the visible child with the switcher's toggle buttons can
lead to GtkButton::clicked being emitted twice. Once for the button
that was active before, and once for the button that we just activated.
This leads to notify::visible-child being called twice and one of
them is with the wrong child.

Let's deal with this in the same way we handle the visible child
changing underneath us.

https://bugzilla.gnome.org/show_bug.cgi?id=749021

gtk/gtkstackswitcher.c

index 42e41bbd75dea549d39ba7efbd9d9fdf1709a7ba..f2932a9a04da58d06b4dd56131060f544e58f67c 100644 (file)
@@ -300,7 +300,9 @@ populate_switcher (GtkStackSwitcher *self)
   if (widget)
     {
       button = g_hash_table_lookup (priv->buttons, widget);
+      priv->in_child_changed = TRUE;
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
+      priv->in_child_changed = FALSE;
     }
 }